package com.ruoyi.info.controller;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.health.domain.User;
import com.ruoyi.health.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 平台用户（前台用户） Controller
 * 
 * @author dalian
 * @date 2023-08-06
 */
@RestController
@RequestMapping("/info/healthUser")
public class FrontUserController extends BaseController
{
    @Autowired
    private IUserService userService;

    /**
     * 获取平台用户 详细信息
     */
    @GetMapping()
    public AjaxResult getInfo()
    {
        //【注意，这里要获取的是前台用户的 id】
        Long frontUserId = SecurityUtils.getUserId();
        if(StringUtils.isNotNull(frontUserId)){
            User user = userService.selectUserById(frontUserId);
            user.setPassword("");  //清空密码
            return success(user);
            // return toAjax(userService.updateUser(user));
        }else{
            return AjaxResult.error("无法获取前台用户信息！");
        }


    }


    /**
     * 修改平台用户 
     */
    @Log(title = "修改我的个人信息（前台用户）", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody User user)
    {
        //【注意，这里要获取的是前台用户的 id】
        Long frontUserId = SecurityUtils.getUserId();
        if(StringUtils.isNotNull(frontUserId)){
            user.setId(frontUserId);
            return toAjax(userService.updateUser(user));
        }else{
            return AjaxResult.error("修改失败！无法获取前台用户信息！");
        }

    }

    /**
     * 修改平台用户的密码
     */
    @Log(title = "修改我的密码（前台用户）", businessType = BusinessType.UPDATE)
    @PutMapping("/updatePwd")
    public AjaxResult updateUserPwd(String oldPassword, String newPassword)
    {
        LoginUser frontLoginUser = getLoginUser();
        Long frontUserId = frontLoginUser.getUserId();
        //从数据库中取 oldPasswordCurrent
        String oldPasswordCurrent = userService.selectUserPassword(frontUserId);
        // matchesPassword会自动对 oldPassword加密
        if (!SecurityUtils.matchesPassword(oldPassword, oldPasswordCurrent))
        {
            return error("修改用户密码失败，旧密码错误！");
        }
        if (SecurityUtils.matchesPassword(newPassword, oldPasswordCurrent))
        {
            return error("新、旧密码不能相同！");
        }
        if (userService.updateUserPassword(frontUserId , newPassword) > 0)
        {
            // 不用 更新缓存，因为缓存中没有前台用户的密码
            // frontLoginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
            // userTokenService.setLoginUser(frontLoginUser);
            return success();
        }
        return error("修改密码异常，请联系管理员");

    }




}
